package yu.com.time

import yu.com.time.calclator.DateCalculator
import yu.com.time.unit.DateUnit
import java.sql.Timestamp
import java.time.LocalDate


/**
 * 和java.sql.Date纯日期进行拓展
 * created by zpf on 2018/8/7 0007
 */
object Dates {

    /**今天的日期*/
    val today: java.sql.Date get() = java.sql.Date.valueOf(LocalDate.now())

    /**昨天的日期*/
    val yesterday: java.sql.Date get() = today.cDay - 1

    /**明天的日期*/
    val tomorrow: java.sql.Date get() = today.cDay + 1

    /**今日0点时间戳*/
    val todayTime: Timestamp get() = today.toTimestamp()

    /**昨日0点时间戳*/
    val yesterdayTime: Timestamp get() = todayTime.cDay - 1

    /**明日0点时间戳*/
    val tomorrowTime: Timestamp get() = todayTime.cDay + 1
}

/**
 * 构造纯日期
 * @param dateStr 日期字符串
 * @param pattern 格式,可空,默认:yyyy-MM-dd
 */
fun Date(dateStr: String, pattern: String = DateTimes.DATE): java.sql.Date = DateTimes.parse(dateStr, pattern).toDate()

/**
 * 设置日期部分
 * @param year 设置小时部分,默认置为0，如果填写null则不改变
 * @param month 设置分钟部分,默认置为1，如果填写null则不改变
 * @param day 设置秒部分,默认置为1，如果填写null则不改变
 */
fun java.sql.Date.withDate(year: Int? = 0, month: Int? = 1, day: Int? = 1): java.sql.Date {
    return toLocalDate().withDate(year, month, day).toDate()
}


/**年份计算*/
val java.sql.Date.cYear get() = DateCalculator(this, DateUnit.YEAR)

/**月份计算*/
val java.sql.Date.cMonth get() = DateCalculator(this, DateUnit.MONTH)

/**星期计算*/
val java.sql.Date.cWeek get() = DateCalculator(this, DateUnit.WEEK)

/**天数计算*/
val java.sql.Date.cDay get() = DateCalculator(this, DateUnit.DAY)